# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3TimeSeries do
  @moduledoc """
  A collection of data points that describes the time-varying values of a metric. A time series is identified by a combination of a fully-specified monitored resource and a fully-specified metric. This type is used for both listing and creating time series.

  ## Attributes

  *   `description` (*type:* `String.t`, *default:* `nil`) - Input only. A detailed description of the time series that will be associated with the google.api.MetricDescriptor for the metric. Once set, this field cannot be changed through CreateTimeSeries.
  *   `metadata` (*type:* `GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMonitoredResourceMetadata.t`, *default:* `nil`) - Output only. The associated monitored resource metadata. When reading a time series, this field will include metadata labels that are explicitly named in the reduction. When creating a time series, this field is ignored.
  *   `metric` (*type:* `GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMetric.t`, *default:* `nil`) - The associated metric. A fully-specified metric used to identify the time series.
  *   `metricKind` (*type:* `String.t`, *default:* `nil`) - The metric kind of the time series. When listing time series, this metric kind might be different from the metric kind of the associated metric if this time series is an alignment or reduction of other time series. When creating a time series, this field is optional. If present, it must be the same as the metric kind of the associated metric. If the associated metric's descriptor must be auto-created, then this field specifies the metric kind of the new descriptor and must be either `GAUGE` (the default) or `CUMULATIVE`.
  *   `points` (*type:* `list(GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3Point.t)`, *default:* `nil`) - The data points of this time series. When listing time series, points are returned in reverse time order. When creating a time series, this field must contain exactly one point and the point's type must be the same as the value type of the associated metric. If the associated metric's descriptor must be auto-created, then the value type of the descriptor is determined by the point's type, which must be `BOOL`, `INT64`, `DOUBLE`, or `DISTRIBUTION`.
  *   `resource` (*type:* `GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMonitoredResource.t`, *default:* `nil`) - The associated monitored resource. Custom metrics can use only certain monitored resource types in their time series data. For more information, see [Monitored resources for custom metrics](https://cloud.google.com/monitoring/custom-metrics/creating-metrics#custom-metric-resources).
  *   `unit` (*type:* `String.t`, *default:* `nil`) - The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. This field can only be changed through CreateTimeSeries when it is empty.
  *   `valueType` (*type:* `String.t`, *default:* `nil`) - The value type of the time series. When listing time series, this value type might be different from the value type of the associated metric if this time series is an alignment or reduction of other time series. When creating a time series, this field is optional. If present, it must be the same as the type of the data in the `points` field.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :description => String.t() | nil,
          :metadata =>
            GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMonitoredResourceMetadata.t() | nil,
          :metric => GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMetric.t() | nil,
          :metricKind => String.t() | nil,
          :points =>
            list(GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3Point.t()) | nil,
          :resource =>
            GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMonitoredResource.t() | nil,
          :unit => String.t() | nil,
          :valueType => String.t() | nil
        }

  field(:description)
  field(:metadata, as: GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMonitoredResourceMetadata)
  field(:metric, as: GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMetric)
  field(:metricKind)
  field(:points, as: GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3Point, type: :list)
  field(:resource, as: GoogleApi.DiscoveryEngine.V1beta.Model.GoogleApiMonitoredResource)
  field(:unit)
  field(:valueType)
end

defimpl Poison.Decoder, for: GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3TimeSeries do
  def decode(value, options) do
    GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3TimeSeries.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.DiscoveryEngine.V1beta.Model.GoogleMonitoringV3TimeSeries do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
